home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 1999 August / SGI Freeware 1999 August.iso / dist / fw_ncurses.idb / usr / freeware / include / ncurses / form.h.z / form.h
Encoding:
C/C++ Source or Header  |  1999-07-16  |  15.7 KB  |  389 lines

  1. /****************************************************************************
  2.  * Copyright (c) 1998 Free Software Foundation, Inc.                        *
  3.  *                                                                          *
  4.  * Permission is hereby granted, free of charge, to any person obtaining a  *
  5.  * copy of this software and associated documentation files (the            *
  6.  * "Software"), to deal in the Software without restriction, including      *
  7.  * without limitation the rights to use, copy, modify, merge, publish,      *
  8.  * distribute, distribute with modifications, sublicense, and/or sell       *
  9.  * copies of the Software, and to permit persons to whom the Software is    *
  10.  * furnished to do so, subject to the following conditions:                 *
  11.  *                                                                          *
  12.  * The above copyright notice and this permission notice shall be included  *
  13.  * in all copies or substantial portions of the Software.                   *
  14.  *                                                                          *
  15.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
  16.  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
  17.  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
  18.  * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
  19.  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
  20.  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
  21.  * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
  22.  *                                                                          *
  23.  * Except as contained in this notice, the name(s) of the above copyright   *
  24.  * holders shall not be used in advertising or otherwise to promote the     *
  25.  * sale, use or other dealings in this Software without prior written       *
  26.  * authorization.                                                           *
  27.  ****************************************************************************/
  28.  
  29. /****************************************************************************
  30.  *   Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997        *
  31.  ****************************************************************************/
  32.  
  33. #ifndef FORM_H
  34. #define FORM_H
  35.  
  36. #include <curses.h>
  37. #include <eti.h>
  38.  
  39. #ifdef __cplusplus
  40.   extern "C" {
  41. #endif
  42.  
  43. typedef int Form_Options;
  44. typedef int Field_Options;
  45.  
  46.     /**********
  47.     *  _PAGE  *
  48.     **********/
  49.  
  50. typedef struct {
  51.   short    pmin;      /* index of first field on page            */
  52.   short    pmax;      /* index of last field on page             */
  53.   short    smin;      /* index of top leftmost field on page     */
  54.   short    smax;      /* index of bottom rightmost field on page */
  55. } _PAGE;
  56.  
  57.     /**********
  58.     *  FIELD  *
  59.     **********/
  60.  
  61. typedef struct fieldnode {
  62.   unsigned short           status;      /* flags                */
  63.   short            rows;      /* size in rows        */
  64.   short            cols;      /* size in cols        */
  65.   short            frow;      /* first row                */
  66.   short            fcol;      /* first col                */
  67.   int                   drows;    /* dynamic rows               */
  68.   int                   dcols;    /* dynamic cols               */
  69.   int                   maxgrow;  /* maximum field growth       */
  70.   int            nrow;      /* offscreen rows            */
  71.   short            nbuf;      /* additional buffers            */
  72.   short            just;      /* justification            */
  73.   short            page;      /* page on form        */
  74.   short            index;      /* into form -> field            */
  75.   int            pad;      /* pad character            */
  76.   chtype        fore;      /* foreground attribute    */
  77.   chtype        back;      /* background attribute    */
  78.   Field_Options        opts;      /* options                */
  79.   struct fieldnode *    snext;      /* sorted order pointer    */
  80.   struct fieldnode *    sprev;      /* sorted order pointer    */
  81.   struct fieldnode *    link;      /* linked field chain            */
  82.   struct formnode *    form;      /* containing form            */
  83.   struct typenode *    type;      /* field type                */
  84.   void *        arg;      /* argument for type            */
  85.   char *        buf;      /* field buffers            */
  86.   void *        usrptr;      /* user pointer        */
  87. } FIELD;
  88.  
  89.     /**************
  90.     *  FIELDTYPE  *
  91.     **************/
  92.  
  93. typedef struct typenode {
  94.   unsigned short    status;                   /* flags               */
  95.   long            ref;                   /* reference count      */
  96.   struct typenode *    left;                   /* ptr to operand for | */
  97.   struct typenode *    right;                   /* ptr to operand for | */
  98.  
  99.   void* (*makearg)(va_list *);                 /* make fieldtype arg   */
  100.   void* (*copyarg)(const void *);              /* copy fieldtype arg   */
  101.   void  (*freearg)(void *);                    /* free fieldtype arg   */
  102.  
  103.   bool    (*fcheck)(FIELD *,const void *);       /* field validation     */
  104.   bool    (*ccheck)(int,const void *);           /* character validation */
  105.  
  106.   bool    (*next)(FIELD *,const void *);         /* enumerate next value */
  107.   bool    (*prev)(FIELD *,const void *);         /* enumerate prev value */
  108.  
  109. } FIELDTYPE;
  110.  
  111.     /*********
  112.     *  FORM  *
  113.     *********/
  114.  
  115. typedef struct formnode {
  116.   unsigned short    status;      /* flags                */
  117.   short            rows;      /* size in rows        */
  118.   short            cols;      /* size in cols        */
  119.   int            currow;      /* current row in field window*/
  120.   int            curcol;      /* current col in field window*/
  121.   int            toprow;      /* in scrollable field window    */
  122.   int                   begincol; /* in horiz. scrollable field */
  123.   short            maxfield; /* number of fields            */
  124.   short            maxpage;  /* number of pages            */
  125.   short            curpage;  /* index into page            */
  126.   Form_Options        opts;      /* options                */
  127.   WINDOW *        win;      /* window                */
  128.   WINDOW *        sub;      /* subwindow                */
  129.   WINDOW *        w;      /* window for current field    */
  130.   FIELD **        field;      /* field [maxfield]            */
  131.   FIELD *        current;  /* current field            */
  132.   _PAGE *        page;      /* page [maxpage]            */
  133.   void *        usrptr;      /* user pointer        */
  134.  
  135.   void                  (*forminit)(struct formnode *);
  136.   void                  (*formterm)(struct formnode *);
  137.   void                  (*fieldinit)(struct formnode *);
  138.   void                  (*fieldterm)(struct formnode *);
  139.  
  140. } FORM;
  141.  
  142. typedef void (*Form_Hook)(FORM *);
  143.  
  144.     /***************************
  145.     *  miscellaneous #defines  *
  146.     ***************************/
  147.  
  148. /* field justification */
  149. #define NO_JUSTIFICATION    (0)
  150. #define JUSTIFY_LEFT        (1)
  151. #define JUSTIFY_CENTER        (2)
  152. #define JUSTIFY_RIGHT        (3)
  153.  
  154. /* field options */
  155. #define O_VISIBLE        (0x0001)
  156. #define O_ACTIVE        (0x0002)
  157. #define O_PUBLIC        (0x0004)
  158. #define O_EDIT            (0x0008)
  159. #define O_WRAP            (0x0010)
  160. #define O_BLANK            (0x0020)
  161. #define O_AUTOSKIP        (0x0040)
  162. #define O_NULLOK        (0x0080)
  163. #define O_PASSOK        (0x0100)
  164. #define O_STATIC                (0x0200)
  165.  
  166. /* form options */
  167. #define O_NL_OVERLOAD        (0x0001)
  168. #define O_BS_OVERLOAD        (0x0002)
  169.  
  170. /* form driver commands */
  171. #define REQ_NEXT_PAGE     (KEY_MAX + 1)    /* move to next page        */
  172. #define REQ_PREV_PAGE     (KEY_MAX + 2)    /* move to previous page    */
  173. #define REQ_FIRST_PAGE     (KEY_MAX + 3)    /* move to first page        */
  174. #define REQ_LAST_PAGE     (KEY_MAX + 4)    /* move to last page        */
  175.  
  176. #define REQ_NEXT_FIELD     (KEY_MAX + 5)    /* move to next field        */
  177. #define REQ_PREV_FIELD     (KEY_MAX + 6)    /* move to previous field    */
  178. #define REQ_FIRST_FIELD     (KEY_MAX + 7)    /* move to first field        */
  179. #define REQ_LAST_FIELD     (KEY_MAX + 8)    /* move to last field        */
  180. #define REQ_SNEXT_FIELD     (KEY_MAX + 9)    /* move to sorted next field    */
  181. #define REQ_SPREV_FIELD     (KEY_MAX + 10)    /* move to sorted prev field    */
  182. #define REQ_SFIRST_FIELD (KEY_MAX + 11)    /* move to sorted first field    */
  183. #define REQ_SLAST_FIELD     (KEY_MAX + 12)    /* move to sorted last field    */
  184. #define REQ_LEFT_FIELD     (KEY_MAX + 13)    /* move to left to field    */
  185. #define REQ_RIGHT_FIELD     (KEY_MAX + 14)    /* move to right to field    */
  186. #define REQ_UP_FIELD     (KEY_MAX + 15)    /* move to up to field        */
  187. #define REQ_DOWN_FIELD     (KEY_MAX + 16)    /* move to down to field    */
  188.  
  189. #define REQ_NEXT_CHAR     (KEY_MAX + 17)    /* move to next char in field    */
  190. #define REQ_PREV_CHAR     (KEY_MAX + 18)    /* move to prev char in field    */
  191. #define REQ_NEXT_LINE     (KEY_MAX + 19)    /* move to next line in field    */
  192. #define REQ_PREV_LINE     (KEY_MAX + 20)    /* move to prev line in field    */
  193. #define REQ_NEXT_WORD     (KEY_MAX + 21)    /* move to next word in field    */
  194. #define REQ_PREV_WORD     (KEY_MAX + 22)    /* move to prev word in field    */
  195. #define REQ_BEG_FIELD     (KEY_MAX + 23)    /* move to first char in field    */
  196. #define REQ_END_FIELD     (KEY_MAX + 24)    /* move after last char in fld    */
  197. #define REQ_BEG_LINE     (KEY_MAX + 25)    /* move to beginning of line    */
  198. #define REQ_END_LINE     (KEY_MAX + 26)    /* move after last char in line    */
  199. #define REQ_LEFT_CHAR     (KEY_MAX + 27)    /* move left in field        */
  200. #define REQ_RIGHT_CHAR     (KEY_MAX + 28)    /* move right in field        */
  201. #define REQ_UP_CHAR     (KEY_MAX + 29)    /* move up in field        */
  202. #define REQ_DOWN_CHAR     (KEY_MAX + 30)    /* move down in field        */
  203.  
  204. #define REQ_NEW_LINE     (KEY_MAX + 31)    /* insert/overlay new line    */
  205. #define REQ_INS_CHAR     (KEY_MAX + 32)    /* insert blank char at cursor    */
  206. #define REQ_INS_LINE     (KEY_MAX + 33)    /* insert blank line at cursor    */
  207. #define REQ_DEL_CHAR     (KEY_MAX + 34)    /* delete char at cursor    */
  208. #define REQ_DEL_PREV     (KEY_MAX + 35)    /* delete char before cursor    */
  209. #define REQ_DEL_LINE     (KEY_MAX + 36)    /* delete line at cursor    */
  210. #define REQ_DEL_WORD     (KEY_MAX + 37)    /* delete line at cursor    */
  211. #define REQ_CLR_EOL     (KEY_MAX + 38)    /* clear to end of line        */
  212. #define REQ_CLR_EOF     (KEY_MAX + 39)    /* clear to end of field    */
  213. #define REQ_CLR_FIELD     (KEY_MAX + 40)    /* clear entire field        */
  214. #define REQ_OVL_MODE     (KEY_MAX + 41)    /* begin overlay mode        */
  215. #define REQ_INS_MODE     (KEY_MAX + 42)    /* begin insert mode        */
  216. #define REQ_SCR_FLINE     (KEY_MAX + 43)    /* scroll field forward a line    */
  217. #define REQ_SCR_BLINE     (KEY_MAX + 44)    /* scroll field backward a line    */
  218. #define REQ_SCR_FPAGE     (KEY_MAX + 45)    /* scroll field forward a page    */
  219. #define REQ_SCR_BPAGE     (KEY_MAX + 46)    /* scroll field backward a page    */
  220. #define REQ_SCR_FHPAGE   (KEY_MAX + 47) /* scroll field forward  half page */
  221. #define REQ_SCR_BHPAGE   (KEY_MAX + 48) /* scroll field backward half page */
  222. #define REQ_SCR_FCHAR    (KEY_MAX + 49) /* horizontal scroll char          */
  223. #define REQ_SCR_BCHAR    (KEY_MAX + 50) /* horizontal scroll char          */
  224. #define REQ_SCR_HFLINE   (KEY_MAX + 51) /* horizontal scroll line          */
  225. #define REQ_SCR_HBLINE   (KEY_MAX + 52) /* horizontal scroll line          */
  226. #define REQ_SCR_HFHALF   (KEY_MAX + 53) /* horizontal scroll half line     */
  227. #define REQ_SCR_HBHALF   (KEY_MAX + 54) /* horizontal scroll half line     */
  228.  
  229. #define REQ_VALIDATION     (KEY_MAX + 55)    /* validate field        */
  230. #define REQ_NEXT_CHOICE     (KEY_MAX + 56)    /* display next field choice    */
  231. #define REQ_PREV_CHOICE     (KEY_MAX + 57)    /* display prev field choice    */
  232.  
  233. #define MIN_FORM_COMMAND (KEY_MAX + 1)    /* used by form_driver        */
  234. #define MAX_FORM_COMMAND (KEY_MAX + 57)    /* used by form_driver        */
  235.  
  236. #if defined(MAX_COMMAND)
  237. #  if (MAX_FORM_COMMAND > MAX_COMMAND)
  238. #    error Something is wrong -- MAX_FORM_COMMAND is greater than MAX_COMMAND
  239. #  elif (MAX_COMMAND != (KEY_MAX + 128))
  240. #    error Something is wrong -- MAX_COMMAND is already inconsistently defined.
  241. #  endif
  242. #else
  243. #  define MAX_COMMAND (KEY_MAX + 128)
  244. #endif
  245.  
  246.     /*************************
  247.     *  standard field types  *
  248.     *************************/
  249. extern FIELDTYPE *TYPE_ALPHA,
  250.                  *TYPE_ALNUM,
  251.                  *TYPE_ENUM,
  252.                  *TYPE_INTEGER,
  253.                  *TYPE_NUMERIC,
  254.                  *TYPE_REGEXP;
  255.  
  256.         /************************************
  257.     *  built-in additional field types  *
  258.         *  They are not defined in SVr4     *
  259.     ************************************/
  260. extern FIELDTYPE *TYPE_IPV4;      /* Internet IP Version 4 address */
  261.  
  262.         /*********************** 
  263.         *   Default objects    *
  264.         ***********************/ 
  265. extern FORM  *_nc_Default_Form;
  266. extern FIELD *_nc_Default_Field;
  267.  
  268.  
  269.     /***********************
  270.     *  FIELDTYPE routines  *
  271.     ***********************/
  272. extern FIELDTYPE 
  273.                 *new_fieldtype(
  274.             bool (* const field_check)(FIELD *,const void *),
  275.             bool (* const char_check)(int,const void *)),
  276.                 *link_fieldtype(FIELDTYPE *,FIELDTYPE *);
  277.  
  278. extern int      free_fieldtype(FIELDTYPE *),
  279.                 set_fieldtype_arg(FIELDTYPE *,
  280.             void * (* const make_arg)(va_list *),
  281.             void * (* const copy_arg)(const void *),
  282.             void (* const free_arg)(void *)),
  283.                 set_fieldtype_choice (FIELDTYPE *,
  284.             bool (* const next_choice)(FIELD *,const void *),
  285.                   bool (* const prev_choice)(FIELD *,const void *));
  286.  
  287.     /*******************
  288.     *  FIELD routines  *
  289.     *******************/
  290. extern FIELD    *new_field(int,int,int,int,int,int),
  291.                 *dup_field(FIELD *,int,int),
  292.                 *link_field(FIELD *,int,int);
  293.  
  294. extern int      free_field(FIELD *),
  295.                 field_info(const FIELD *,int *,int *,int *,int *,int *,int *),
  296.                 dynamic_field_info(const FIELD *,int *,int *,int *),
  297.                 set_max_field( FIELD *,int),
  298.                 move_field(FIELD *,int,int),
  299.                 set_field_type(FIELD *,FIELDTYPE *,...),
  300.                 set_new_page(FIELD *,bool),
  301.                 set_field_just(FIELD *,int),
  302.                 field_just(const FIELD *),
  303.                 set_field_fore(FIELD *,chtype),
  304.                 set_field_back(FIELD *,chtype),
  305.                 set_field_pad(FIELD *,int),
  306.                 field_pad(const FIELD *),
  307.                 set_field_buffer(FIELD *,int,const char *),
  308.                 set_field_status(FIELD *,bool),
  309.                 set_field_userptr(FIELD *, void *),
  310.                 set_field_opts(FIELD *,Field_Options),
  311.                 field_opts_on(FIELD *,Field_Options),
  312.                 field_opts_off(FIELD *,Field_Options);
  313.  
  314. extern chtype   field_fore(const FIELD *),
  315.                 field_back(const FIELD *);
  316.  
  317. extern bool     new_page(const FIELD *),
  318.                 field_status(const FIELD *);
  319.  
  320. extern void     *field_arg(const FIELD *);
  321.  
  322. extern void     *field_userptr(const FIELD *);
  323.  
  324. extern FIELDTYPE
  325.                 *field_type(const FIELD *);
  326.  
  327. extern char*    field_buffer(const FIELD *,int);
  328.  
  329. extern Field_Options  
  330.                 field_opts(const FIELD *);
  331.  
  332.     /******************
  333.     *  FORM routines  *
  334.     ******************/
  335. extern FORM     *new_form(FIELD **);
  336.  
  337. extern FIELD    **form_fields(const FORM *),
  338.                 *current_field(const FORM *);
  339.  
  340. extern WINDOW   *form_win(const FORM *),
  341.                 *form_sub(const FORM *);
  342.  
  343. extern Form_Hook
  344.                 form_init(const FORM *),
  345.                 form_term(const FORM *),
  346.                 field_init(const FORM *),
  347.                 field_term(const FORM *);
  348.  
  349. extern int      free_form(FORM *),
  350.                 set_form_fields(FORM *,FIELD **),
  351.                 field_count(const FORM *),
  352.                 set_form_win(FORM *,WINDOW *),
  353.                 set_form_sub(FORM *,WINDOW *),
  354.                 set_current_field(FORM *,FIELD *),
  355.                 field_index(const FIELD *),
  356.                 set_form_page(FORM *,int),
  357.                 form_page(const FORM *),
  358.                 scale_form(const FORM *,int *,int *),
  359.                 set_form_init(FORM *,Form_Hook),
  360.                 set_form_term(FORM *,Form_Hook),
  361.                 set_field_init(FORM *,Form_Hook),
  362.                 set_field_term(FORM *,Form_Hook),
  363.                 post_form(FORM *),
  364.                 unpost_form(FORM *),
  365.                 pos_form_cursor(FORM *),
  366.                 form_driver(FORM *,int),
  367.                 set_form_userptr(FORM *,void *),
  368.                 set_form_opts(FORM *,Form_Options),
  369.                 form_opts_on(FORM *,Form_Options),
  370.                 form_opts_off(FORM *,Form_Options),
  371.                 form_request_by_name(const char *);
  372.  
  373. extern const char
  374.                 *form_request_name(int);
  375.  
  376. extern void     *form_userptr(const FORM *);
  377.  
  378. extern Form_Options
  379.                 form_opts(const FORM *);
  380.  
  381. extern bool     data_ahead(const FORM *),
  382.                 data_behind(const FORM *);
  383.  
  384. #ifdef __cplusplus
  385.   }
  386. #endif
  387.  
  388. #endif    /* FORM_H */
  389.